       ID Division.
       Program-ID. A1903c.
       Environment Division.
      *Datendeklaration
       Data Division.
       01  person.
           02 persnr pic x(4).
           02 namen.
               03 nname pic x(20).
               03 vname pic x(15).
           02 adresse.
               03 ort pic x(10).
               03 strase pic x(10).
               03 land pic x(3).
               03 plz pic x(4).
           02 gebdat.
               03 jahr pic 9999.
                   88 jahrok value 1900 thru 2000.
               03 mon pic 99.
                   88 mon31 value 1,3,5,7,8,10,12.
                   88 mon30 value 4,6,9,11.
                   88 mon28 value 2.
                   88 monok value 1 thru 12.
               03 tag pic 99.
           02 gehalt pic 9999999999V99 packed-decimal.
       01  flag pic 9 value 0.
           88 flagok value 1.
       01  datumflag pic 9 value 0.
           88 datumok value 1.
       01  erg pic 9(4).
       01  rest pic 9999.
      *Ausgabeformate
       01  gehalt-out pic z,zzz,zzz,zz9.99.
       Procedure division.
       main.
           perform eingabe
           if flagok then
           perform ausgabe
           end-if
           stop run.

       eingabe.
           display 'Gib deine Personalnr ein: ' upon console
           accept persnr from console
           if persnr is numeric then
           display 'Gib deinen Vornamen ein: ' upon console
           accept vname from console
           if vname not = Spaces then
           display 'Gib deinen Nachname ein: ' upon console
           accept nname from console
           if nname not = Spaces then
           display 'Gib deinen Wohnort ein: ' upon console
           accept ort from console
           if ort not = Spaces then
           display 'Gib deine Strase ein: ' upon console
           accept strase from console
           if strase not = Spaces then
           display 'Gib deinen Heimatland ein: ' upon console
           accept land from console
           if land not = Spaces then
           display 'Gib deine PLZ ein: ' upon console
           accept plz from console
           if plz is numeric then
           perform datum
           if datumok then
           display 'Gib deine Gehalt ein: ' upon console
           accept gehalt from console
           if gehalt is numeric then
           move 1 to flag
           else
           display 'Fehler: Gehalt falsch' upon console
           end-if
           end-if
           else
           display 'Fehler: PLZ falsch' upon console
           end-if
           else
           display 'Fehler: Heimatland falsch' upon console
           end-if
           else
           display 'Fehler: Stase falsch' upon console
           end-if
           else
           display 'Fehler: Wohnort falsch' upon console
           end-if
           else
           display 'Fehler: Nachname falsch' upon console
           end-if
           else
           display 'Fehler: Vorname falsch' upon console
           end-if
           else
           display 'Fehler: Personalnummer falsch' upon console
           end-if.

       ausgabe.
           move gehalt to gehalt-out
           display 'Deine Personalnr ist: ' persnr upon console
           display 'Dein Vorname ist: ' vname upon console
           display 'Dein Nachname ist: ' nname upon console
           display 'Dein Wohnort ist: ' ort upon console
           display 'Deine Strase ist: ' strase upon console
           display 'Dein Heimatland ist: ' land upon console
           display 'Deine PLZ ist: ' plz upon console
           display 'Dein Gebjahr ist: ' jahr upon console
           display 'Dein Gebmonat ist: ' mon upon console
           display 'Dein Gebtag ist: ' tag upon console
           display 'Dein Gehalt betraegt: ' gehalt-out upon console.

       datum.
           display 'Gib dein Gebjahr ein: ' upon console
           accept jahr from console
           if jahrok then
           display 'Gib dein Gebmonat ein: ' upon console
           accept mon from console
           if monok then
           display 'Gib dein Gebtag ein: ' upon console
           accept tag from console
           if mon31 then
           if tag > 0 and tag < 32 then
           add 1 to datumflag
           next sentence
           else
           display 'Dein Gebtag ist falsch!' upon console
           end-if
           else
           if mon30 then
           if tag > 0 and tag < 31 then
           add 1 to datumflag
           next sentence
           else
           display 'Dein Gebtag ist falsch!' upon console
           end-if
           else
           if mon28 then
           divide jahr by 4 giving erg remainder rest
           if rest = 0 then
           add 1 to datumflag
           divide jahr by 100 giving erg remainder rest
           if rest = 0 then
           move 0 to datumflag
           divide jahr by 400 giving erg remainder rest
           if rest = 0 then
           add 1 to datumflag
           next sentence
           end-if
           end-if
           end-if
           end-if
           end-if
           display 'Dein Gebtag ist falsch!' upon console
           next sentence
           end-if
           else
           display 'Dein Gebmonat ist falsch!' upon console
           end-if
           else
           display 'Dein Gebjahr ist falsch!' upon console
           end-if.
